﻿using System;
using System.Web;

using System.Drawing;
using System.Drawing.Imaging;  //添加引用
namespace Token.Piker.Web.Admin
{
    public partial class ValidateCode : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //调用自定义方法绘制验证码
            CreateCheckCodeImage(80,40);
        }

        // 生成验证码字符串
        private string CreateCheckCodeString()
        {
            // 定义用于验证码的字符数组
            char[] allCharArray = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'W', 'X', 'Y', 'Z' };
            // 定义验证码字符串
            string randomCode = "";
            Random rand = new Random();
            // 生成四位验证码字符串
            for (int i = 0; i < 4; i++)
                randomCode += allCharArray[rand.Next(allCharArray.Length)];
            return randomCode;
        }
        // 生成验证码图片
        public void CreateCheckCodeImage(int width, int height)
        {
            // 定义12pt的Arial字体，用于绘制文字
            Font font = new Font("Arial", 16, FontStyle.Bold);
            // 定义黑色的单色画笔，用于绘制文字
            SolidBrush brush = new SolidBrush(Color.Black);
            // 定义第钢笔，用于绘制干扰线
            Pen pen1 = new Pen(Color.Gray, 0); // 注意这里直接获得了一个现有的Color对象
            Pen pen2 = new Pen(Color.FromArgb(255, 100, 100, 100), 0); // 注意这里根据ARGB值获得了一个Color对象
            // 创建一个图像
            Bitmap image = new Bitmap(width, height);
            // 从图像获取一个绘图画面
            Graphics g = Graphics.FromImage(image);
            // 清除整个绘图画面并以指定颜色填充
            g.Clear(ColorTranslator.FromHtml("#F0F0F0")); // 注意这里从HTML颜色代码获得了Color对象
            // 定义文字的绘制矩形区域
            RectangleF rect = new RectangleF(5, 10, width, height);
            // 定义一个随机数对象，用于绘制干扰线
            Random rand = new Random();
            // 生成两条横向的干扰线
            for (int i = 0; i < 2; i++)
            {
                // 定义起点
                Point p1 = new Point(0, rand.Next(height));
                // 定义终点
                Point p2 = new Point(width, rand.Next(height));
                // 绘制直线
                g.DrawLine(pen1, p1, p2);
            }
            // 生成四条纵向的干扰线
            for (int i = 0; i < 4; i++)
            {
                // 定义起点
                Point p1 = new Point(rand.Next(width), 0);
                // 定义终点
                Point p2 = new Point(rand.Next(width), height);
                // 绘制直线
                g.DrawLine(pen2, p1, p2);
            }
            // 绘制验证码文字
            string checkCodeString = CreateCheckCodeString();
            Session["ValidateCode"] = checkCodeString;
            g.DrawString(checkCodeString, font, brush, rect);
            //将图片输出到页面上
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            Response.ClearContent();
            Response.ContentType = "image/Gif";
            Response.BinaryWrite(ms.ToArray());
            // 释放对象
            g.Dispose();
            image.Dispose();
        }
    }
}